package lambda;

import java.io.File;
import java.io.FileFilter;

/*
JDK8之后推出一个新的特性：lambda表达式
lambda表达式可以用更简短的语法创建匿名内部类。
语法：
（参数列表）->{
      方法体
}
需要注意,使用lambda表达式创建时实现的接口中只能有一个抽象方法

编译器会结合程序语义分析出实现的是哪个结构，由于要求接口只能有一个抽象方法，
所以也能知道重写的方法是什么，最终将它还原为匿名内部类
 */
public class lambdaDemo1 {
    public static void main(String[] args) {
        File dir = new File(".");
        FileFilter filter = (file) ->{//有多少子项就调几遍
                return file.getName().contains("e");//因为接口只有accept一个抽象方法，所以直接调
        /*
        当方法中只有一句代码，那么方法体的“{}”可以忽略不写，
        并且如果该方法要求返回值，则return关键字也要一同忽略
         FileFilter filter =
                 (file) ->file.getName().contains("e");

         */
        };
        File[] subs = dir.listFiles(filter);
        System.out.println("子项个数："+subs.length);
        for(int i=0;i<subs.length;i++) {
            System.out.println(subs[i].getName());

        }
    }
}
/*
 FileFilter filter = new FileFilter(){//匿名内部类
                public boolean accept(File file) {//有多少子项就调几遍
                    String name = file.getName();
                    return name.contains("e");
                }
            };
 */